/**
 * 一、私有构造函数constructor：对类的 构造函数constructor 进行 private访问性修饰
*/
class Foo {
    private constructor() { }
}

/**
 * 有些场景下私有构造函数确实很有用，
 * 比如把类作为 utils 方法时，此时 Utils 类内部全部都是静态成员，我们并不希望真的有人去实例化这个类。
 * 此时就可以使用私有构造函数来阻止它被错误地实例化
 */
class Utils {
    public static identifier = "hanxuming";

    private constructor() { }

    public static makeUHappy() {
        console.log("makeUHappy");
    }
}
console.log(Utils.identifier)

/**
 * 二、SOLID 原则：
 * 
 * S，单一功能原则，一个类应该仅具有一种职责
 * 
 * O，开放封闭原则，一个类应该是可扩展但不可修改的
 * 
 * L，里式替换原则，一个派生类可以在程序的任何一处对其基类进行替换
 * 
 * I，接口分离原则，类的实现方应当只需要实现自己需要的那部分接口
 * 
 * D，依赖倒置原则，这是实现开闭原则的基础，它的核心思想即是对功能的实现应该依赖于抽象层，即不同的逻辑通过实现不同的抽象类。
*/

//export {}：解决“无法重新声明块范围变量”错误提示问题
export { }